#include "config/type.h"
#include "user.h"

bool first_time = true;

// 用户态进程主函数
int init(void) {
	int pid = 0, wait_pid = 0;

	if (first_time) {
		first_time = false;
	}

	while (true) {
		// pid = fork();
		// printf("pid = %d\n", pid);
		if (pid < 0) {
			perror(init, "fork() return an error");
			exit(1);
		} else {
			// 进入 shell
			shell_on();
    		shell_entry();
			perror(init, "failed to enter shell");
			exit(1);
		}
		
		// 处理其他进程
		while (true) {
			wait_pid = wait((int *) 0);
			if(wait_pid == pid){
				// 说明 shell 退出了，进入新循环重新启动 shell
				break;
			} else if(wait_pid < 0){
				perror(init, "wait() return an error");
				exit(1);
			} else {
				// 该进程没有父进程，什么都不做
			}
		}
	}
}
